home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 5 / 02 / tips & tricks / multiplizieren.asm < prev    next >
Encoding:
Assembly Source File  |  1995-06-01  |  1002 b   |  42 lines

  1.     opt o+,p+
  2.  
  3. ; Assembler: DevPac v2.14
  4. ; IN:     d0,d1      -->   Faktor,Faktor
  5. ; OUT:    d0,d1,d2   -->   Faktor,Faktor,Produkt
  6.  
  7. ; RETURN: d2 = 0     -->   wenn bei LSL.L #1,D0 oder
  8. ;                          ADD.L D0,D2 ein Überlauf
  9. ;                          auftritt (Zahl wird größer
  10. ;                          als 2^32)
  11.  
  12.     move.l  #356,d0
  13.     move.l  #98743,d1
  14.  
  15. mul
  16.     movem.l d0/d1,-(sp) ; Werte sichern
  17.     moveq   #0,d2       ; D2 löschen
  18.     cmp.l   d0,d1       ; größerer Wert in D0 stehen
  19.     ble.s   .mul_loop
  20.     exg     d0,d1
  21.  
  22. .mul_loop
  23.     lsl.l   #1,d0       ; mit 2 multiplizieren
  24.     bcs.s   .overflow
  25.     lsr.l   #1,d1       ; durch 2 teilen
  26.     btst    #0,d1       ; Zahl gerade ?
  27.     beq.s   .even       ; ja
  28.     add.l   d0,d2       ; nein -> addieren
  29.     bcs.s   .overflow
  30.  
  31. .even
  32.     cmp.l   #1,d1       ; Fertig ??
  33.     bne.s   .mul_loop   ; Nein -> weiter geht`s
  34.     bra.s   .mul_done
  35.  
  36. .overflow
  37.     moveq   #0,d2
  38.  
  39. .mul_done
  40.     movem.l (sp)+,d0/d1 ; und tschüß...
  41.     rts
  42.